#!/usr/bin/python
# -*- coding: utf-8 -*-

'''
查找测试用例，生成测试套件
    unittest.TestLoader()/unittest.defaultTestLoader()
    实例化testloader()类
    调用discover方法生成测试套件
    返回测试套件

运行测试套件，生成测试报告
    创建测试报告名及路径
    以写入模式打开文件
    实例化HTMLTestRunner得到一个runner对象
    调用实例方法执行测试用例
    关闭文件

清理报告
    方案一：全部清理
        os.dirlist()获取某个文件下全部文件
        循环删除没一个文件os.remove

    方案二：保留最新的N个
        os.dirlist()获取某个文件下全部文件
        得到一个列表
        循环删除每一个文件os.remove

    方案三：按文件创建时间删除
        os.dirlist()获取某个文件下全部文件
        获取文件生成时间os.getctime()
        将每个文件名和创建时间组成一个字典：字典推导式：｛创建时间：文件名｝，
        按时间进行排序
        得到最新的5个列表
        循环删除没一个文件os.remove
'''

# 查找测试用例，生成测试套件
import unittest
import os
import HTMLTestRunner
import time

def create_suite():
    case_dir = os.path.dirname(__file__) + r'/testCase'
#     unittest.TestLoader()/unittest.defaultTestLoader()
#     实例化testloader()类
    loader = unittest.TestLoader()
#     调用discover方法生成测试套件
    suite = loader.discover(start_dir=case_dir, pattern='test*.py')
    print(suite)
#     返回测试套件
    return suite

# 清理报告
#     方案一：全部清理
def auto_clear():
#         os.dirlist()获取某个文件下全部文件
    dir = os.path.dirname(__file__) + r'/testReport'
    file_list = os.listdir(dir)
#         循环删除没一个文件os.remove
#     for i in file_list:
#         os.remove(dir + '/' + i)
    for i in file_list[:-3]:
        if '.html' in i:
            os.remove(dir + '/' + i)



if __name__ == '__main__':
    #清理报告文件
    auto_clear()

    suite = create_suite()
# 运行测试套件，生成测试报告
#     创建测试报告名及路径
    #获取时间
    cur_time =time.strftime('%Y_%d_%m_%H_%M_%S', time.localtime())
    report = os.path.dirname(__file__) + r'/testReport/' + cur_time + 'report.html'
#     以写入模式打开文件
    with open(report, 'wb') as fp:
#     实例化HTMLTestRunner得到一个runner对象
        runner = HTMLTestRunner.HTMLTestReportCN(stream=fp, title='接口自动化测试报告', description='接口测试结果',
                                                 verbosity=2)
#     调用实例方法执行测试用例
        runner.run(suite)
#     关闭文件

